package com.easyOrder.core.mq;

import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.Producer;
import com.aliyun.openservices.ons.api.SendResult;
import com.aliyun.openservices.ons.api.exception.ONSClientException;
import com.easyOrder.core.exception.api.MessageQueneSendError;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/** 
 * @description: 消息队列生产者，负责发送消息
 */  
@Service
public class Sender implements ISender {
	
	@Autowired
	Producer producer;
	
	private static final Logger logger = Logger.getLogger(Sender.class);
	
	public String sendMessage(String topic,String txt, String tag) {

		 Message msg = new Message( //
                 // Message Topic
                 topic,
                 // Message Tag 可理解为Gmail中的标签，对消息进行再归类，方便Consumer指定过滤条件在MQ服务器过滤
                 tag,
                 // Message Body 可以是任何二进制形式的数据， MQ不做任何干预
                 // 需要Producer与Consumer协商好一致的序列化和反序列化方式
                 txt.getBytes());
         // 设置代表消息的业务关键属性，请尽可能全局唯一
         // 以方便您在无法正常收到消息情况下，可通过MQ 控制台查询消息并补发
         // 注意：不设置也不会影响消息正常收发
         // msg.setKey("ORDERID_100");
         // 发送消息，只要不抛异常就是成功
         try {
             SendResult sendResult = producer.send(msg);
             return  sendResult.getMessageId();
         }catch (ONSClientException e) {
        	 logger.error(e, e);
             throw new MessageQueneSendError();
         }

	}


}
